//展览馆展出来自 13 个朝代的文物，每排展柜展出 5 个文物。某排文物的摆放情况记录于数组 places，其中 places[i] 表示处于第 i 位文物的
//所属朝代编号。其中，编号为 0 的朝代表示未知朝代。请判断并返回这排文物的所属朝代编号是否能够视为连续的五个朝代（如遇未知朝代可算作连续情况）。 
//
// 
//
// 示例 1： 
//
// 
//输入：places = [0, 6, 9, 0, 7]
//输出：True
// 
//
// 
//
// 示例 2： 
//
// 
//输入：places = [7, 8, 9, 10, 11]
//输出：True
// 
//
// 
//
// 提示： 
//
// 
// places.length = 5 
// 0 <= places[i] <= 13 
// 
//
// 
//
// Related Topics 数组 排序 👍 371 👎 0


package LeetCode.editor.cn;


import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @author ldltd
 * @date 2025-05-20 21:52:45
 * @description LCR 186.文物朝代判断
 
 */
 
public class BuKePaiZhongDeShunZiLcof {
    public static void main(String[] args) {
    //测试代码
    BuKePaiZhongDeShunZiLcof fun = new BuKePaiZhongDeShunZiLcof();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean checkDynasty1(int[] places) {
        //因为一共只有5个位置，所以可以直接使用Set来判断是否有重复
        Set<Integer> repeat = new HashSet<>();
        int max = 0, min = 14;
        for(int place : places) {
            if(place == 0) continue; // 跳过未知朝代
            max = Math.max(max, place); // 最大编号朝代
            min = Math.min(min, place); // 最小编号朝代
            if(repeat.contains(place)) return false; // 若有重复，提前返回 false
            repeat.add(place); // 添加此朝代至 Set
        }
        return max - min < 5; // 最大编号朝代 - 最小编号朝代 < 5 则连续
    }
    public boolean checkDynasty(int[] places) {
        int unknown = 0;
        Arrays.sort(places); // 数组排序
        for(int i = 0; i < 4; i++) {
            if(places[i] == 0) unknown++; // 统计未知朝代数量
            else if(places[i] == places[i + 1]) return false; // 若有重复，提前返回 false
        }
        return places[4] - places[unknown] < 5; // 最大编号朝代 - 最小编号朝代 < 5 则连续
    }


}
//leetcode submit region end(Prohibit modification and deletion)

}
